home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / epp / pmodules / etimer.e < prev    next >
Text File  |  1980-01-05  |  4KB  |  105 lines

  1. OPT TURBO
  2.  
  3. MODULE 'dos/dos'
  4. PMODULE 'PMODULES:stack'
  5.  
  6. OBJECT et_procInfoType
  7.   visits:LONG
  8.   started:datestamp
  9.   elapsed:datestamp
  10.   name:LONG
  11. ENDOBJECT
  12.  
  13. DEF et_procInfoArray:PTR TO et_procInfoType,
  14.     et_stack:st_stackType,
  15.     et_numberOfProcs=0,
  16.     et_idRunning=-1 /* Used to turn timer off/on in case of recursive */
  17.                      /* call.  Used by et_StartTime AND et_StopTime.  */
  18.  
  19. PROC et_init(numberOfProcs)
  20.   DEF i, elapsed:PTR TO datestamp
  21.   et_numberOfProcs:=numberOfProcs+1
  22.   et_procInfoArray:=New(SIZEOF et_procInfoType*et_numberOfProcs)
  23.   FOR i:=0 TO numberOfProcs
  24.     et_procInfoArray[i].visits:=0
  25.     elapsed:=et_procInfoArray[i].elapsed
  26.     elapsed.minute:=0
  27.     elapsed.tick:=0
  28.   ENDFOR
  29.   st_init(et_stack)
  30. ENDPROC
  31.  
  32. PROC et_startTimer(id, name)
  33.   DEF current:datestamp, started:PTR TO datestamp, elapsed:PTR TO datestamp
  34.   DateStamp(current)
  35.   /* Update the elapsed time of the proc that relinquished control to     */
  36.   /* child.  Init if et_idRunning = -1 (PROC main () is the *only* case.) */
  37.   IF et_idRunning=-1
  38.     et_init(id)
  39.   ELSE
  40.     started:=et_procInfoArray[et_idRunning].started
  41.     elapsed:=et_procInfoArray[et_idRunning].elapsed
  42.     IF current.tick<started.tick
  43.       current.tick:=current.tick+3000
  44.       current.minute:=current.minute-1
  45.     ENDIF
  46.     elapsed.tick:=elapsed.tick+(current.tick-started.tick)
  47.     elapsed.minute:=elapsed.minute+(current.minute-started.minute)
  48.   ENDIF
  49.   st_push(et_stack,et_idRunning)
  50.   /* Update the start time of the child proc. */
  51.   started:=et_procInfoArray[id].started
  52.   started.minute:=current.minute
  53.   started.tick:=current.tick
  54.   et_procInfoArray[id].name:=IF name=NIL THEN '' ELSE name
  55.   et_idRunning:=id
  56.   et_procInfoArray[id].visits:=et_procInfoArray[id].visits+1
  57. ENDPROC
  58.  
  59. PROC et_toMinutes(ticks) RETURN ticks/3000
  60.  
  61. PROC et_report()
  62.   DEF i, totalMinute=0, totalTick=0, ds:PTR TO datestamp
  63.   FOR i:=0 TO (et_numberOfProcs-1)
  64.     ds:=et_procInfoArray[i].elapsed
  65.     ds.minute:=ds.minute+et_toMinutes(ds.tick)
  66.     ds.tick:=ds.tick-(et_toMinutes(ds.tick)*3000)
  67.     WriteF('\nid=\d, visits=\d, minute=\d, tick=\d, name=\s',
  68.             i, et_procInfoArray[i].visits, ds.minute, ds.tick,
  69.             et_procInfoArray[i].name)
  70.     totalMinute:=totalMinute+ds.minute
  71.     totalTick:=totalTick+ds.tick
  72.   ENDFOR
  73.   totalMinute:=totalMinute+et_toMinutes(totalTick)
  74.   totalTick:=totalTick-(et_toMinutes(totalTick)*3000)
  75.   WriteF('\ntotalMinute=\d totalTick=\d\n', totalMinute, totalTick)
  76. ENDPROC
  77.  
  78.  
  79. PROC et_stopTimer ()
  80.   DEF current:datestamp, started:PTR TO datestamp, elapsed:PTR TO datestamp
  81.   DateStamp(current)
  82.   /* Update the elapsed time of the child proc that id returning control */
  83.   /* to the parent.  None if et_idRunning = -1 (PROC main () is the      */
  84.   /* *only* case.)                                                       */
  85.   started:=et_procInfoArray[et_idRunning].started
  86.   elapsed:=et_procInfoArray[et_idRunning].elapsed
  87.     IF current.tick<started.tick
  88.       current.tick:=current.tick+(50*60)
  89.       current.minute:=current.minute-1
  90.     ENDIF
  91.   elapsed.tick:=elapsed.tick+(current.tick-started.tick)
  92.   elapsed.minute:=elapsed.minute+(current.minute-started.minute)
  93.   /* Update the start time of the parent proc.  None if et_idRunning = -1 */
  94.   /* (PROC main () is the *only* case.)                                   */
  95.   et_idRunning:=st_pop(et_stack)
  96.   IF et_idRunning>-1
  97.     started:=et_procInfoArray[et_idRunning].started
  98.     started.minute:=current.minute
  99.     started.tick:=current.tick
  100.   ELSE
  101.     et_report()
  102.   ENDIF
  103. ENDPROC
  104.  
  105.